約 2,604,661 件
https://w.atwiki.jp/sabupot/pages/16.html
OpenGLに関するリンク集です。 GLUTによる「手抜き」OpenGL入門 ↑情報量が多いです。OpenGLのインストール方法も詳しく書いてあります。 OpenGL Programin ↑よく見てないので分かりません。
https://w.atwiki.jp/opengl/pages/286.html
こちらに OpenGL Simple Adapter があるので使わせてもらいます。 nursの日記http //d.hatena.ne.jp/nurs/20080315/1205598655 使い方は OpenGL Simple Adapter.h をインクルードして OpenGLSimpleAdapter のインスタンスを作成して GLAdapter- BeginRender(); と GLAdapter- EndRender(); の間に いつもの OpenGL のコードを記述するだけです。 OpenGL Simple Adapter.h #pragma once #pragma comment( lib, opengl32.lib ) #pragma comment( lib, glu32.lib ) #pragma comment( lib, gdi32.lib ) #pragma comment( lib, User32.lib ) #include windows.h #include gl/gl.h #include gl/glu.h //↑こいつの#include は、たぶんこことかではなく、 // コードの中でもusing namespace System;とか記述する // よりも前にしないと、C2872 に苦しめられることになる。 public ref class OpenGLSimpleAdapter // ↑CLRでやる場合は、class の前に、public ref を入れてね { // // OpenGL Simple Adaptor loOGLHost (C) 2008 nurs // // 使い方: // 1)本クラスのインスタンスを、ターゲットビューのメンバとして作成する。 // コンストラクタのHDCは、Win32なら // ⇒ GetDC( this- GetSafeHwnd() ) ); // CLRのFormなら、 // ⇒ GetDC( (HWND)parentForm- Handle.ToPointer() ); // などとして取ってきます。 // 2)ターゲットビューの、適切な箇所(初期化、描画、リサイズ)にて、 // 本ホストの、BeginRender()と、EndRender() を呼び出し、その間に、 // 目的のOpenGL描画コードを記述します。 // *)ちなみに利用側コードのどこかのcpp内にて、 //#pragma comment( lib, opengl32.lib ) //#pragma comment( lib, glu32.lib ) //#pragma comment( lib, gdi32.lib ) //#pragma comment( lib, User32.lib ) // の記述も、忘れないで下さい。 // // ★RenderPolicyを予め作成しておき、必要なときに必要な描画 // ポリシーで、Render() をかける、という使い方もできます。 // ★注意:WindowsForm、.NET環境の場合は、プロジェクトの共通言語 // ランタイムサポートを、/clr pure ではなく、/clr にする。 // // public OpenGLSimpleAdapter( HDC dc ){ if(dc==0) return; m_hdc = dc; { static PIXELFORMATDESCRIPTOR pfd={ sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, PFD_TYPE_RGBA, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, PFD_MAIN_PLANE, 0, 0, 0, 0 }; GLint iPixelFormat; if( (iPixelFormat = ChoosePixelFormat(m_hdc, pfd) ) == 0) return; if(SetPixelFormat(m_hdc, iPixelFormat, pfd) == FALSE) return; } if( (m_hglrc = wglCreateContext(m_hdc) )==0) return; // pure Managed だとランタイムでエラーに if( (wglMakeCurrent(m_hdc, m_hglrc) )==0) return; wglMakeCurrent(0, 0); return; } ~OpenGLSimpleAdapter( void ){} template class RenderPolicy void Render( RenderPolicy po ){ wglMakeCurrent( this- m_hdc, this- m_hglrc ); po(); wglMakeCurrent( this- m_hdc, 0 ); SwapBuffers( this- m_hdc ); } HDC BeginRender( void ){ wglMakeCurrent( this- m_hdc, this- m_hglrc ); return this- m_hdc; } void EndRender( void ){ wglMakeCurrent( this- m_hdc, 0 ); SwapBuffers( this- m_hdc ); } void EndRenderNoSwap( void ){ wglMakeCurrent( this- m_hdc, 0 ); } private HDC m_hdc; HGLRC m_hglrc; }; /*使用例 まず、OpenGLSimpleAdapterのインスタンスを作成します。 そして、BeginRender() と、EndRender() の間に目的のOpenGLのgl描画コードを書きます。 private System Void Form1_Load(System Object^ sender, System EventArgs^ e) { GLAdapter = gcnew OpenGLSimpleAdapter(GetDC( (HWND)panel1- Handle.ToPointer() )); } private System Void panel1_Paint(System Object^ sender, System Windows Forms PaintEventArgs^ e) { GLAdapter- BeginRender(); { glClearColor( 0,0,0,0 ); glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT ); } GLAdapter- EndRender(); } */ MyForm.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include MyForm.h using namespace opengl; [STAThreadAttribute] int main(){ MyForm ^form1 = gcnew MyForm; form1- ShowDialog(); return 0; } MyForm.h #pragma once #include OpenGL Simple Adapter.h namespace opengl { using namespace System; using namespace System ComponentModel; using namespace System Collections; using namespace System Windows Forms; using namespace System Data; using namespace System Drawing; /// summary /// MyForm の概要 /// /summary public ref class MyForm public System Windows Forms Form { public MyForm(void) { InitializeComponent(); // //TODO ここにコンストラクター コードを追加します // } protected /// summary /// 使用中のリソースをすべてクリーンアップします。 /// /summary ~MyForm() { if (components) { delete components; } } private System Windows Forms Panel^ panel1; protected private /// summary /// 必要なデザイナー変数です。 /// /summary System ComponentModel Container ^components; #pragma region Windows Form Designer generated code /// summary /// デザイナー サポートに必要なメソッドです。このメソッドの内容を /// コード エディターで変更しないでください。 /// /summary void InitializeComponent(void) { this- panel1 = (gcnew System Windows Forms Panel()); this- SuspendLayout(); // // panel1 // this- panel1- Location = System Drawing Point(24, 24); this- panel1- Name = L panel1 ; this- panel1- Size = System Drawing Size(218, 182); this- panel1- TabIndex = 0; this- panel1- Paint += gcnew System Windows Forms PaintEventHandler(this, MyForm panel1_Paint); // // MyForm // this- AutoScaleDimensions = System Drawing SizeF(6, 12); this- AutoScaleMode = System Windows Forms AutoScaleMode Font; this- ClientSize = System Drawing Size(284, 261); this- Controls- Add(this- panel1); this- Name = L MyForm ; this- Text = L MyForm ; this- ResumeLayout(false); } #pragma endregion void Line2D(int x1,int y1,int x2, int y2,float size){ glLineWidth(size); glBegin(GL_LINES); glVertex2i(x1,y1); glVertex2i(x2,y2); glEnd(); } private System Void panel1_Paint(System Object^ sender, System Windows Forms PaintEventArgs^ e) { OpenGLSimpleAdapter^ GLAdapter = gcnew OpenGLSimpleAdapter(GetDC( (HWND)panel1- Handle.ToPointer() )); GLAdapter- BeginRender(); { glClearColor( 0,0,0,0 ); glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT ); glOrtho(0, panel1- Width, panel1- Height, 0, -1, 1); glColor4f(1.0f,1.0f,1.0f,1.0f); Line2D(20,40,200,180,1.0); } GLAdapter- EndRender(); } }; }
https://w.atwiki.jp/pspt/pages/248.html
OpenGL OpenGLはグラフィックスハードウェアのAPI。 2次元・3次元コンピュータグラフィックス両方が扱えどのOSでも使う事ができる。 他のグラフィックスハードウェアのAPIはMS社のDirectXなどがある。 OpenGL導入の仕方(osがwindowsで開発環境がvisual c++の場合) OpenGLのHello world 二次元の図形を表示させたい! 参考 導入の仕方(osがwindowsで開発環境がvisual c++の場合) OpenGL自体はどのosにも大抵入っているが動かせるようにするにはちょっとした手続きが必要です。 まずここからglut-3.7.6-bin.zipをダウンロードし解凍しましょう。 glut32.dll glut32.lib glut.h というファイルがあるのでdllをOSが 32bitならC \Windows\System32に 64bitならC \Windows\SysWOW64に に置きましょう。 続いてglut.hを\Microsoft Visual Studio 11.0\VC\include\gl(glがなければ作る) glut32.libを\Microsoft Visual Studio 11.0\VC\lib に置きましょう。 これで#include gl/glut.h とおいてコンパイルエラーが起こらなければ成功です。 設定はこれだけです。 注意 glut.hをインクルードする時はstdio.hとstdlib.hを先頭にして下さい。 OpenGLのHello world #include GL/glut.h void display(void) { } int main(int argc, char *argv[]) { glutInit( argc, argv); glutCreateWindow("hello world"); glutDisplayFunc(display); glutMainLoop(); return 0; } void glutInit(int *argc, char **argv) GLUT および OpenGL 環境を初期化します。 引数には main の引数をそのまま渡します. X Window で使われるオプション -display などはここで処理されます. この関数によって引数の内容が変更されます. int glutCreateWindow(char *name) ウィンドウを開きます. 引数 name はそのウィンドウの名前の文字列で, タイトルバーなどに表示されます. void glutDisplayFunc(void (*func)(void)) 引数 func は開いたウィンドウ内に描画する関数へのポインタです. ウィンドウが開かれたり, 他のウィンドウによって隠されたウィンドウが再び現れたりして, ウィンドウを再描画する必要があるときに, この関数が実行されます. したがって, この関数内で図形表示を行います. void glutMainLoop(void) これは無限ループです. この関数を呼び出すことで, プログラムはイベントの待ち受け状態になります. この関数がないとウィンドウが一瞬で消えてしまいます。 図形の描写はdiplay関数内で行われます。 二次元の図形を表示させたい! 参考 GLUTによる「手抜き」OpenGL入門 http //www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html OpenGL de プログラミング http //wiki.livedoor.jp/mikk_ni3_92/
https://w.atwiki.jp/ookubo/pages/19.html
ゲームテクニック ゲームに関する情報 OpenGL の描画処理を高速化についてのkeyWard. ・ディスプレイリスト ・頂点配列 ・VBO = Vertex Buffer Object ・カリング カリング- OpenGLビュークラスを作る- OpenGL サンプル --
https://w.atwiki.jp/june1st/pages/13.html
C++BuilderでVCLと共存してGLUTを使う ココのサンプルを参考に プロジェクトに追加で glut32.libと OpenGLのプログラム.c() ← glutInit( _argc, _argv)、glutCreateWindow("sample")、main() → (例えば)GLmain を追加 Project1.cppに USELIB("glut32.libのパス"); USEUNIT("OpenGLのプログラム.c"); Unit1.cpp側で extern "C" int GLmain(void); 外部関数として"OpenGLのプログラム.c"に書かれた関数を呼び出す グローバル変数も外部呼出ししてVCLでいじればおk UbuntuでGLUTを使う とりあえずsynapticでGLUTをインストール(GLUT3〜? gccのオプションに-lglut -lGLU -lGLをつける
https://w.atwiki.jp/usonx/pages/21.html
VC++(MFC)とOpenGL MFCとOpenGLの親和性は高い。逆にMFCとDirectXの親和性は低く、現在のバージョンにおいて、MFC+DirectXの組み合わせは難しい。理由としては、そもそもDirectX自体がMFCを前提としなくなったこと。SampleからMFCtex(MFC+DirectXのサンプル)が消えている。MFCtexがあるバージョンは、DirectX9(2003)のようだが、探した限りではMicrosoft上には見当たらなかった(仮にあったとしてもVC++6のものとなる。VC++2005では、そのままコンパイルできない)。 OpenGLのインストール 1.GLUTのダウンロード 下記サイトから"glut-3.7.6-bin.zip"をダウンロードし、適当なフォルダに解凍する。 http //www.xmission.com/~nate/glut.html 2.ファイルのコピー 解凍したファイルを下記ディレクトリに移動する。フォルダ名は環境によって若干異なる。.hは、GLフォルダを作りその中に入れること。 glut.h → C \Program Files\Microsoft Visual Studio\VC98\Include\GL .lib → C \Program Files\Microsoft Visual Studio\VC98\Lib .dll → C \WINDOWS\SYSTEM32 MFC(ダイアログベース)+OpenGL プロジェクト名をhogeとすると、 1.ヘッダファイルの記述 クラスChogeDlgに以下includeを追加 \#include GL/glaux.h 2.メンバ変数の追加 クラスChogeDlgに以下変数を追加する CDC* m_pDC; HGLRC m_GLRC; 3.メンバ関数の追加 int ChogeDlg SetDCPixelFormat(HDC hdc) { static PIXELFORMATDESCRIPTOR pfd = { sizeof (PIXELFORMATDESCRIPTOR),// Size of this structure 1,// Version number PFD_DRAW_TO_WINDOW |// Flags PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, PFD_TYPE_RGBA,// RGBA pixel values 24,// 24-bit color 0, 0, 0, 0, 0, 0,// Don t care about these 0, 0,// No alpha buffer 0, 0, 0, 0, 0,// No accumulation buffer 32,// 32-bit depth buffer 0,// No stencil buffer 0,// No auxiliary buffers PFD_MAIN_PLANE,// Layer type 0,// Reserved (must be 0) 0, 0, 0// No layer masks }; int nPixelFormat; nPixelFormat = ChoosePixelFormat (hdc, pfd); if (SetPixelFormat(hdc, nPixelFormat, pfd) == FALSE){ // SetPixelFormat error return FALSE ; } if (DescribePixelFormat(hdc, nPixelFormat, sizeof(PIXELFORMATDESCRIPTOR), pfd) == 0) { // DescribePixelFormat error return FALSE ; } if (pfd.dwFlags PFD_NEED_PALETTE) { // Need palete ! } return TRUE ; } void ChogeDlg InitGL() { m_pDC = new CClientDC(this); // Get device context SetDCPixelFormat(m_pDC- m_hDC); // Set OpenGL pixel format m_GLRC = wglCreateContext (m_pDC- m_hDC); // Create rendering context wglMakeCurrent (m_pDC- m_hDC, m_GLRC); // Current context set glClearColor(0.0f, 0.0f, 0.5f, 1.0f); } void ChogeDlg DrawGL() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) ; } BOOL ChogeDlg OnInitDialog() の return TRUE; の上に InitGL(); を追加する. ClassView@ChogeDlg→メッセージ で WM_DESTROY をダブルクリックし, OnDestroy を呼ぶ. void ChogeDlg OnDestroy() { CView OnDestroy(); // TODO この位置にメッセージ ハンドラ用のコードを追加してください wglMakeCurrent(NULL, NULL); // free current context wglDeleteContext(m_GLRC); // Delete rendering context delete m_pDC; // Release device context } OnPaint に以下の文を追加. void COpenGLTest2Dlg OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 描画用のデバイス コンテキスト SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // クライアントの矩形領域内の中央 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect( rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // アイコンを描画します。 dc.DrawIcon(x, y, m_hIcon); } else { CDialog OnPaint(); DrawGL(); //これを追加 SwapBuffers(m_pDC- m_hDC); //これを追加 } } Pictureコントロール上に描画するには、 ダイアログにピクチャボックスを設置する.(大きさは適当) ID→ID_PICT に書き換え,クラスウィザードで ID_PICT の変数を追加する. コントロールID タイプ メンバ IDC_PICT CStatic m_Pict InitGL() に一文を追加する. void COpenGLTest2Dlg InitGL() { m_pDC = new CClientDC(this); m_pDC- m_hDC = m_Pict.GetDC()- GetSafeHdc(); //これを追加 SetDCPixelFormat(m_pDC- m_hDC); m_GLRC = wglCreateContext (m_pDC- m_hDC); wglMakeCurrent (m_pDC- m_hDC, m_GLRC); glClearColor(0.0f, 0.0f, 0.5f, 1.0f); }
https://w.atwiki.jp/sevenlives/pages/2256.html
GLUT OpenGL ES GLSL? WebGL OpenCL? シリコングラフィックス?
https://w.atwiki.jp/bambooflow/pages/245.html
CreatorでOpenGLをはじめる方法メモ Qt4.6 Qt4.7の場合はこちら CreatorでOpenGLをはじめる方法メモはじめかた ソースコードの修正 コンパイル&実行 はじめかた プロジェクトの作成 ここではGUIアプリケーション作成を選択します。 プロジェクト名はhello_glとします。 パスは、ここでは"C \work"としました。 OpenGLを使用するので、QtOpenGLにチェックを入れます。 基本クラスは、QWdigetを選択します。(後にQGLWidgetを設定するために) これで、プロジェクト作成は完了です。 ソースコードの修正 次にソースコードを修正します。 下記のファイルは、自動で生成されると思います。 main.cpp widget.cpp widget.h widget.ui main.cppは変更しません。 widget.uiはQtのユーザフォーム設定なので変更しません。 変更するのは、widget.cppとwidget.hです。 widget.h #ifndef WIDGET_H #define WIDGET_H #include QWidget #include QGLWidget // = 追加 namespace Ui { class Widget; } class Widget public QGLWidget { // = QWidgetをQGLWdigetに変更 Q_OBJECT public Widget(QWidget *parent = 0); ~Widget(); protected void changeEvent(QEvent *e); virtual void initializeGL(); // = 追加 virtual void resizeGL( int w, int h ); // = 追加 virtual void paintGL(); // = 追加 private Ui Widget *ui; }; #endif // WIDGET_H widget.cpp #include "widget.h" #include "ui_widget.h" Widget Widget(QWidget *parent) QGLWidget(parent), // = QWidgetをQGLWdigetに変更 ui(new Ui Widget) { ui- setupUi(this); } Widget ~Widget() { delete ui; } void Widget changeEvent(QEvent *e) { QWidget changeEvent(e); switch (e- type()) { case QEvent LanguageChange ui- retranslateUi(this); break; default break; } } void Widget initializeGL() // = 追加 { glClearColor(0.3, 0.3, 0.3, 1.0); } void Widget resizeGL( int w, int h ) // = 追加 { glViewport(0, 0, w, h); glLoadIdentity(); glOrtho( -w/200.0, w/200.0, -h/200.0, h/200.0, -1.0, 1.0); } void Widget paintGL() // = 追加 { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3d(1.0, 0.0, 0.0); glBegin(GL_POLYGON); glVertex2d(-0.5, -0.5); glVertex2d(0.5, -0.5); glVertex2d(0.5, 0.5); glVertex2d(-0.5, 0.5); glEnd(); //glFlush(); } コンパイル&実行 デバッグを実行(F5)します。
https://w.atwiki.jp/opengles/pages/24.html
Open GL ES commands are formed from a return type, a name, and optionally a type letter i for 32-bit int, or f for 32-bit float, as shown by the prototype below return-type Name{1234}{if}{v} ([args ,] T arg1 , . . . , T argN [, args]); The arguments enclosed in brackets ([args ,] and [, args]) may or may not be present. The argument type T and the number N of arguments may be indicated by the command name suffixes. N is 1, 2, 3, or 4 if present, or else corresponds to the type letters. If “v” is present, an array of N items is passed by a pointer. For brevity, the OpenGL documentation and this reference may omit the standard prefixes. The actual names are of the forms glFunctionName(), GL_CONSTANT, GLtype
https://w.atwiki.jp/slab/pages/14.html
開発環境の構築(Windows) 下記サイトを参照。 VisualC++ を使った OpenGL 入門【0.1日目】OpenGL と Visual C++ 2008 Express Edition の準備 まずはVisual Studio 2010をインストールする。(Visual C++ 2010 Express EditionでもOK。Visual C++ 2010 Express Editionは無料。) GLUTのダウンロードサイトの一番上にある「glut-3.7.6-bin.zip (117 KB)」をダウンロードする。 Windows7でVisual Studio 2010を使って開発する場合は、解凍したzipに入っている3つのファイルを以下のように配置する。 ファイル名 設置場所 glut32.dll C \Windows\SysWOW64 glut32.lib C \Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib glut.h C \Program Files (x86)\Microsoft Visual Studio 10.0\VC\include Visual Studio 2010でプロジェクトを作成する際に、プロジェクトの種類を「CLR」にして開発をする。